#pragma once
#include <deque>
class CMediaFrame;


using namespace std;
class CMediaBuffer
{
	
public:
	CMediaBuffer(EMediaType e);
	~CMediaBuffer(void);

	BOOL InitBuffer(INT size = 30);
	
	CMediaFrame* GetNullFrame();
	CMediaFrame* GetValidFrame();	

	VOID PushNullFrame(CMediaFrame* p);
	VOID PushValidFrame(CMediaFrame* p);
	BOOL GetFirstFrameTime(LONGLONG& llStart, LONGLONG& llStop);

private:
	void DeinitBuffer();


private:
	EMediaType m_eMediaType;
	deque<CMediaFrame*> m_qValidData;
	deque<CMediaFrame*> m_qJustNull;
	deque<CMediaFrame*> m_qTotal;
	CCritSec m_csValid;
	CCritSec m_csNull;	
	CAMEvent m_ValidEvent;
	CAMEvent m_NullEvent;
	LONGLONG m_llStart, m_llStop;
};
